<?php
/**
 * 
 * EUtente.php
 * 
 * File contente la classe EUtente
 * @author Igor Di Paolo <igor.di.paolo@gmail.com>
 * @package Entity
 */
/**
 * EUtente
 * @package Entity
 * @author mw
 *
 */
class EUtente extends EEntity implements JSONSerializable {
	/**
	 * Username
	 * @var string $username
	 */
	private $username;
	/**  
	 * Password
	 * 
	 * hash della password
	 * 
	 * @var string $password
	 */
	private $password;
	/**
	 * Nome
	 * @var string $nome
	 */
	private $nome;
	/** 
	 * Cognome
	 * @var string $cognome
	 */
	private $cognome;
	/** 
	 * Email
	 * @var string $email
	 */
	private $email;
	/**
	 * Livello
	 * @var integer $livello
	 */
	private $livello; 
	/**
	 * Attivato
	 * @var integer $attivato
	 */
	private $attivato;
	/**
	 * Hash attivazione
	 * @var string $hashattivazione
	 */
	private $hashattivazione;
	/**
	 * Costruttore
	 */
	public function __construct() {
		parent::__construct();	
	}
	/**
	 * getUsername
	 * @return string 
	 */
	public function getUsername() {
		return $this->username;
	}
	/**
	 * getEmail
	 * @return string 
	 */
	public function getEmail() {
		return $this->email;
	}
	/**
	 * setEmail
	 * @param string Email
	 * @throws ExceptionDati
	 */
	public function setEmail($email) {
		if(!preg_match(RX_EMAIL, $email)){
			throw new ExceptionDati('Email non valida!', 0);
		}
		$this->email = $email;
	}
	/**
	 * getPassword
	 * @return string $password (hash sha1+salt)
	 */
	public function getPassword() {
		return $this->password;
	}
	/**
	 * getNome
	 * @return string $nome
	 */
	public function getNome() {
		return $this->nome;
	}
	/**
	 * getCognome
	 * @return string $cognome
	 */
	public function getCognome() {
		return $this->cognome;
	}
	/**
	 * setUsername
	 * @param string $username
	 * @throws ExceptionDati
	 */
	public function setUsername($username) {
		if(!preg_match(RX_USERNAME,$username)){
			throw new ExceptionDati('Campo username non valido!');
		}
		$this->username = $username;
	}
	/**
	 * setNome
	 * @param string $nome
	 * @throws ExceptionDati
	 */
	public function setNome($nome) {
		if(!preg_match(RX_NOME,$nome)){
			throw new ExceptionDati('Campo nome non valido!');
		}
		$this->nome = $nome;
	}
	/**
	 * setCognome
	 * @param string cognome
	 * @throws ExceptionDati
	 */
	public function setCognome($cognome) {
		if(!preg_match(RX_NOME,$cognome)){
			throw new ExceptionDati('Campo cognome non valido!');
		}
		$this->cognome = $cognome;
	}
	/**
	 * setLivello
	 * @param integer id
	 */
	public function setLivello($id) {
		$this->livello = $id;
	}
	/**
	 * 
	 * generatePassword
	 * @param string $password
	 * @return string
	 */
	public static function generatePassword($password) {
		return sha1(SALT.$password);
		
	}
	/**
	 * comparePassword
	 * @param string $password1
	 * @param string $passhash
	 */
	public static function comparePassword($password1,$passhash) {
		$passhash1 = self::generatePassword($password1);
		return !strcmp($passhash, $passhash1);
	}
	/**
	 * generaCodiceAttivazione
	 * @return int
	 */
    public static function generaCodiceAttivazione() {
        return mt_rand();
    }
    /**
	 * getHashAttivazione
	 * @return string
	 */
    public function getHashAttivazione() {
		return $this->hashattivazione;
    }
    /**
     * getAttivato
	 * @return string
	 */
    public function getAttivato() {
		return $this->attivato;
	}
	/**
	 * setAttivato
	 * @param int $attivato
	 */
	public function setAttivato($attivato) {
		if(!is_int($attivato)){
			throw new ExceptionDati('Parametro Attivato non corretto!', 0);
		}
		$this->attivato = $attivato;
	}
	/**
	 * getLivello
	 * @return int
	 */
	public function getLivello() {
		return $this->livello;
	}
	/**
	 * setHashAttivazione
	 * @param string $hash
	 */
	public function setHashAttivazione($hash) {
		$this->hashattivazione = $hash;
	}
	/**
	 * setPassword
	 * @param string $password
	 */
	public function setPassword($password) {
		if(!preg_match(RX_PASSWORD,$password)) {
			throw new ExceptionDati('Password troppo corta');
		}
		$this->password = $this->generatePassword($password);
	}
	/**
	 * (non-PHPdoc)
	 * @see EEntity::toArray()
	 * @return array
	 */
	public function toArray() {
		$result = array();
		foreach($this as $key => $value) {
			$result[$key] = $value;
		}
		return $result;
	}
	/**
	 * jsonEncode
	 * @return string
	 */
	public function jsonEncode() {
		
	}
	/**
	 * jsonDecode
	 * @param stdClass $json
	 */
	public function jsonDecode($json) {
		
	}
	
}